AWS ParallelCluster 3.4.0 でコンピュートノードのマルチ AZ 起動をサポートしました
2022年12月22日に AWS ParallelCluster 3.4.0 がリリースされました。v3.3.0 のリリースから約1か月強と早い間隔でのマイナーアップデートです。
注目のアップデート紹介
個人的な注目ポイントと、アップデートの目玉(っぽいもの)をピックアップしました。アップデート前後の違いについてはリリースノートの情報から把握するのは難しいためわかる範囲で補足します。
アップデート詳細はリリースノートをご確認ください。
コンピュートノードのマルチ AZ 対応
コンピュートノードのサブネット(AZ)を複数指定ができるようになり、マルチ AZ 構成でコンピュートノードを起動できます。 可用性や、耐障害性という意味のマルチ AZ 対応というよりは複数の AZ を利用することで計算リソース(EC2 インスタンス)を確保しやすい構成を取れるようになったアップデートと捉えています。
通常ジョブをサブミットするときにキューを指定します。
今回のアップデートでキューの設定で複数のサブネットを指定ができるようになりました。具体的にはクラスターのコンフィグでSubnetsIds
の箇所で複数のサブミット ID を指定できます。
SlurmQueues: # ------ Compute 1 ------ - Name: queue-1 ComputeResources: - Name: multiaz-queue Instances: - InstanceType: c6i.large MinCount: 0 MaxCount: 10 DisableSimultaneousMultithreading: true ComputeSettings: LocalStorage: RootVolume: Size: 35 Encrypted: true VolumeType: gp3 Iops: 3000 Throughput: 125 CapacityType: SPOT AllocationStrategy: lowest-price Networking: SubnetIds: - subnet-035be95eeaa091603 - subnet-0ba7369f9caba6f93
設定方法と注意事項
今回検証に利用したサブネットを2つ設定したキューがあるクラスターのサンプルコンフィグです。
Region: ap-northeast-1 Image: Os: ubuntu2004 Tags: - Key: Name Value: MultiAZ-Cluster # ---------------------------------------------------------------- # Head Node Settings # ---------------------------------------------------------------- HeadNode: InstanceType: t3.micro Networking: ElasticIp: false SubnetId: subnet-035be95eeaa091603 Ssh: KeyName: sandbox-key LocalStorage: RootVolume: Size: 35 Encrypted: true VolumeType: gp3 Iops: 3000 Throughput: 125 Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore S3Access: - BucketName: hpc-dev-postinstall-files EnableWriteAccess: false # ---------------------------------------------------------------- # Compute Node Settings # ---------------------------------------------------------------- Scheduling: Scheduler: slurm SlurmSettings: ScaledownIdletime: 5 SlurmQueues: # ------ Compute 1 ------ - Name: queue-1 ComputeResources: - Name: multiaz-queue Instances: - InstanceType: c6i.large MinCount: 0 MaxCount: 10 DisableSimultaneousMultithreading: true ComputeSettings: LocalStorage: RootVolume: Size: 35 Encrypted: true VolumeType: gp3 Iops: 3000 Throughput: 125 CapacityType: SPOT AllocationStrategy: lowest-price Networking: SubnetIds: - subnet-035be95eeaa091603 - subnet-0ba7369f9caba6f93 # PlacementGroup: # Enabled: true # CustomActions: # OnNodeConfigured: # Script: s3://hpc-dev-postinstall-files/sample-ubuntu-docker/postinstall.sh Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore S3Access: - BucketName: hpc-dev-postinstall-files EnableWriteAccess: false # ---------------------------------------------------------------- # Shared Storage Settings # ---------------------------------------------------------------- # SharedStorage: # - MountDir: /mnt/efs-1zone # Name: efs-1zone # StorageType: Efs # EfsSettings: # FileSystemId: fs-0f1158ade79354809 # ---------------------------------------------------------------- # Other Settings # ---------------------------------------------------------------- Monitoring: Logs: CloudWatch: Enabled: true RetentionInDays: 30 DeletionPolicy: "Delete" Dashboards: CloudWatch: Enabled: false
マルチ AZ 設定時の注意事項
設定時の注意事項です。ドキュメントに記載があった点と、見逃していたか見つけられなかったでクラスター作成時にわかったことをまとめます。
ドキュメントより
- マルチ AZ 指定するときは
ComputeResources:
のInstances
指定が必須Instances
指定は v3.3.0で追加になった設定項目です
- サブネット設定は同一の AZ を複数する指定はできない
- サブネットは異なる AZ を指定する必要がある
Scheduling section - AWS ParallelCluster
クラスターを作成してわかったこと
- プレイスメントグループは有効化できない
- 現状 ParallelCluster でのプレイスメントグループ有効はクラスタープレイスメントグループのみしか選択できないためと思われる
- One Zone EFS はマウントできない
{ "configurationValidationErrors": [ { "level": "ERROR", "type": "MultiAzPlacementGroupValidator", "message": "You have enabled PlacementGroups for the 'multiaz-queue' Compute Resource on the 'queue-1' queue. PlacementGroups are not supported across Availability zones. Either remove the PlacementGroup configuration to use multiple subnets on the queue or specify only one subnet to use a PlacementGroup for compute resources." }, { "level": "ERROR", "type": "EfsIdValidator", "message": "Cluster has subnets located in different availability zones but EFS (fs-0f1158ade79354809) uses OneZone EFS storage class which works within a single Availability Zone. Please use subnets located in one Availability Zone or use a standard storage class EFS." }, { "level": "INFO", "type": "MultiAzRootVolumeValidator", "message": "Your configuration for Queues 'queue-1' includes multiple subnets different from where HeadNode is located. Accessing a shared storage from different AZs can lead to increased storage network latency and inter-AZ data transfer costs." } ], "message": "Invalid cluster configuration." }
ヘッドノードはマルチ AZ 非対応
ジョブスケジュラーのヘッドノードはマルチ AZ 構成非対応であり、コンピュートノードのみがマルチ AZ 対応です。
必ずしもマルチ AZ にする必要はない
MPI を利用してコンピュートノード上のメモリ間でデータ転送が頻繁に行われる場合ですとレイテンシーが悪くなるため同一 AZ に比べると不利です。仮に同一 AZ でコンピュートノードが起動してきもてプレイスメントグループを有効化できない仕様のためなおさら不利になります。
実際にジョブをサブミットしたところ同じ AZ で複数台起動しました。プレイスメントグループ(クラスタープレイスメント)が有効ではないためマルチ AZ 指定していない従来のキューと比べるとコンピュートノード間のレイテンシーは劣ります。
スポット単価優先の設定にしていたため同一 AZ で起動してきたのかと思ったのですが価格は同じでした。
FSx for Lustre の様なシングル AZ にしか ENI が作成されないストレージを利用する場合も同様です。レイテンシーが悪くなります。また AZ またぎで ENI(= FSx for Lustre)へアクセスする場合はデータ転送量で課金が発生することを認識しておいた方がよいです。
おわりに
プレイスメントグループについては ParallelCluster でプレイスメントグループを有効化すると自動的にクラスタープレイスメントグループが設定されます。複数 AZ 指定でプレイスメントグループ使えないのは仕様ですのでクラスターのコンフィグで無効化しておく必要がありました。
コンピュートノードだけではなくヘッドノードがマルチ AZ 対応になってくれると嬉しいので今後のアップデートに期待しています。